{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#引用包\n",
    "import pandas as pd \n",
    "import numpy as np \n",
    "import matplotlib.pyplot as plt \n",
    "from scipy import stats \n",
    "import pymysql \n",
    "import warnings \n",
    "warnings.filterwarnings('ignore') \n",
    "plt.rcParams['font.family']='SimHei' \n",
    "plt.rcParams['axes.unicode_minus']= False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>timestamp</th>\n",
       "      <th>group</th>\n",
       "      <th>landing_page</th>\n",
       "      <th>converted</th>\n",
       "      <th>date</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>851104</td>\n",
       "      <td>2017-01-21 22:11:48.556739</td>\n",
       "      <td>control</td>\n",
       "      <td>old_page</td>\n",
       "      <td>0</td>\n",
       "      <td>2017-01-21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>804228</td>\n",
       "      <td>2017-01-12 08:01:45.159739</td>\n",
       "      <td>control</td>\n",
       "      <td>old_page</td>\n",
       "      <td>0</td>\n",
       "      <td>2017-01-12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>661590</td>\n",
       "      <td>2017-01-11 16:55:06.154213</td>\n",
       "      <td>treatment</td>\n",
       "      <td>new_page</td>\n",
       "      <td>0</td>\n",
       "      <td>2017-01-11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>853541</td>\n",
       "      <td>2017-01-08 18:28:03.143765</td>\n",
       "      <td>treatment</td>\n",
       "      <td>new_page</td>\n",
       "      <td>0</td>\n",
       "      <td>2017-01-08</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>864975</td>\n",
       "      <td>2017-01-21 01:52:26.210827</td>\n",
       "      <td>control</td>\n",
       "      <td>old_page</td>\n",
       "      <td>1</td>\n",
       "      <td>2017-01-21</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id                   timestamp      group landing_page  converted  \\\n",
       "0   851104  2017-01-21 22:11:48.556739    control     old_page          0   \n",
       "1   804228  2017-01-12 08:01:45.159739    control     old_page          0   \n",
       "2   661590  2017-01-11 16:55:06.154213  treatment     new_page          0   \n",
       "3   853541  2017-01-08 18:28:03.143765  treatment     new_page          0   \n",
       "4   864975  2017-01-21 01:52:26.210827    control     old_page          1   \n",
       "\n",
       "         date  \n",
       "0  2017-01-21  \n",
       "1  2017-01-12  \n",
       "2  2017-01-11  \n",
       "3  2017-01-08  \n",
       "4  2017-01-21  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv(r\"ab_data.csv\")\n",
    "data[\"date\"] = data.timestamp.str[:10]\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 检验指标确定"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "一类指标：人均停留时长\n",
    "\n",
    "二类指标：广告点击率"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 确定检验统计量"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "一类指标统计量为均值之差\n",
    "\n",
    "二类指标统计量为比例之差"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 埋点收集数据"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![image.png](attachment:image.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 确定H0,H1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "一类指标\n",
    "\n",
    "H1：control_stime - treatment_stime < 2 *std(control_stime)\n",
    "\n",
    "H0：control_stime - treatment_stime >= 2 * std(control_stime)\n",
    "\n",
    "二类指标\n",
    "\n",
    "H0：treatment_p- control_p >0\n",
    "\n",
    "H1：treatment_p- control_p <=0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 确定显著水平α"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "一类错误使用默认值 α= 0.05\n",
    "\n",
    "二类错误使用默认值 β= 0.2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "alpha = 0.05\n",
    "beta = 0.2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 计算样本量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.1203863045004612"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#计算p0\n",
    "control_p = data.converted[(data.group==\"control\") & (data.landing_page==\"old_page\")].mean()\n",
    "control_p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.10589344218918344"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#计算p0*(1-p0)\n",
    "control_p_1_control_p = control_p * (1-control_p)\n",
    "control_p_1_control_p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.6448536269514729"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#计算z 1-alpha\n",
    "Z1_alpha = stats.norm.isf(alpha,loc=0,scale=1)\n",
    "Z1_alpha"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8416212335729142"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#计算z 1-beta\n",
    "Z1_beta = stats.norm.isf(beta,loc=0,scale=1)\n",
    "Z1_beta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.1303863045004612 0.010000000000000009\n"
     ]
    }
   ],
   "source": [
    "treatment_p = control_p + 0.01\n",
    "p_p0 = treatment_p - control_p\n",
    "print(treatment_p,p_p0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.11338571609917422"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# p * (1-p)\n",
    "p_1_p = treatment_p * (1-treatment_p)\n",
    "p_1_p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6701.938803160921"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n = control_p_1_control_p * ((Z1_alpha + Z1_beta * np.sqrt(p_1_p/control_p_1_control_p))/p_p0) ** 2\n",
    "n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "group      landing_page\n",
       "control    new_page          1928\n",
       "           old_page        145274\n",
       "treatment  new_page        145311\n",
       "           old_page          1965\n",
       "Name: user_id, dtype: int64"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.groupby([\"group\",\"landing_page\"])[\"user_id\"].count()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 利用统计工具实现检验"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>group</th>\n",
       "      <th>landing_page</th>\n",
       "      <th>converted</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>control</td>\n",
       "      <td>new_page</td>\n",
       "      <td>0.106383</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>control</td>\n",
       "      <td>old_page</td>\n",
       "      <td>0.113809</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>treatment</td>\n",
       "      <td>new_page</td>\n",
       "      <td>0.113781</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>treatment</td>\n",
       "      <td>old_page</td>\n",
       "      <td>0.097826</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       group landing_page  converted\n",
       "0    control     new_page   0.106383\n",
       "1    control     old_page   0.113809\n",
       "2  treatment     new_page   0.113781\n",
       "3  treatment     old_page   0.097826"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = data[data.date=='2017-01-03'].groupby([\"group\",\"landing_page\"],as_index=False)[\"converted\"].mean()\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "statistic_t = df.converted[2] - df.converted[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "6590 6618\n"
     ]
    }
   ],
   "source": [
    "n1 = data[data.date=='2017-01-03'].converted[(data.group==\"control\") & (data.landing_page==\"old_page\")].size\n",
    "n2 = data[data.date=='2017-01-03'].converted[(data.group==\"treatment\") & (data.landing_page==\"new_page\")].size\n",
    "print(n1,n2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.005526379176809786"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sigma = np.sqrt(df.converted[2] * (1 - df.converted[2])/n2 + df.converted[1] * (1-df.converted[1])/n1)\n",
    "sigma"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5020359187180234"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "statistic_p = 1 - stats.norm.cdf(statistic_t,0,sigma)\n",
    "statistic_p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "显著性p > alpha 实验组点击率 <= 对照组\n"
     ]
    }
   ],
   "source": [
    "if(statistic_p > alpha):\n",
    "    print(\"显著性p > alpha 实验组点击率 <= 对照组\")\n",
    "else:\n",
    "    print(\"显著性p < alpha 实验组点击率 > 对照组\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "def ABtest_P(df:pd.DataFrame,group_col:str = None,value_col:str = None,alpha:float = 0.05):\n",
    "    if not group_col:\n",
    "        group_col = df.columns[0]\n",
    "    if not value_col:\n",
    "        value_col = df.columns[1]\n",
    "        \n",
    "    temp = df.groupby(group_col,as_index=False)[value_col].mean()\n",
    "    temp_n = df.groupby(group_col,as_index=False)[value_col].count()\n",
    "    tongjiliang = temp.iloc[0,1] - temp.iloc[1,1]\n",
    "    \n",
    "    diff_error = np.sqrt(temp.iloc[0,1]*(1-temp.iloc[0,1])/temp_n.iloc[0,1] + temp.iloc[1,1]*(1-temp.iloc[1,1])/temp_n.iloc[1,1])\n",
    "    \n",
    "    tongjiliang_left_p = stats.norm.cdf(tongjiliang,0,diff_error)\n",
    "    tongjiliang_right_p = 1-stats.norm.cdf(tongjiliang,0,diff_error)\n",
    "    tongjiliang_site_p = tongjiliang_left_p * 2\n",
    "    if tongjiliang_site_p > 1:\n",
    "        tongjiliang_site_p = tongjiliang_right_p * 2\n",
    "        \n",
    "    temp_1 = [[temp.iloc[0,0],temp.iloc[1,0],tongjiliang,\"左侧\",tongjiliang_left_p,np.where(tongjiliang_left_p<alpha,\"显著\",\"不显著\")],\n",
    "              [temp.iloc[0,0],temp.iloc[1,0],tongjiliang,\"右侧\",tongjiliang_right_p,np.where(tongjiliang_right_p<alpha,\"显著\",\"不显著\")],\n",
    "              [temp.iloc[0,0],temp.iloc[1,0],tongjiliang,\"双侧\",tongjiliang_site_p,np.where(tongjiliang_site_p<alpha,\"显著\",\"不显著\")]]\n",
    "    temp = pd.DataFrame(temp_1,columns=[\"p\",\"p0\",\"统计量\",\"检测\",\"p_value\",\"结果\"])\n",
    "    \n",
    "    return temp"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>group</th>\n",
       "      <th>converted</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>treatment</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>treatment</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>control</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>72</th>\n",
       "      <td>treatment</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>84</th>\n",
       "      <td>control</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        group  converted\n",
       "38  treatment          0\n",
       "41  treatment          0\n",
       "57    control          0\n",
       "72  treatment          0\n",
       "84    control          0"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "temp = data[data.date=='2017-01-03'].loc[((data.group==\"control\") & (data.landing_page==\"old_page\"))\n",
    "                |((data.group==\"treatment\") & (data.landing_page==\"new_page\")),[\"group\",\"converted\"]]\n",
    "temp.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>p</th>\n",
       "      <th>p0</th>\n",
       "      <th>统计量</th>\n",
       "      <th>检测</th>\n",
       "      <th>p_value</th>\n",
       "      <th>结果</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>control</td>\n",
       "      <td>treatment</td>\n",
       "      <td>0.000028</td>\n",
       "      <td>左侧</td>\n",
       "      <td>0.502036</td>\n",
       "      <td>不显著</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>control</td>\n",
       "      <td>treatment</td>\n",
       "      <td>0.000028</td>\n",
       "      <td>右侧</td>\n",
       "      <td>0.497964</td>\n",
       "      <td>不显著</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>control</td>\n",
       "      <td>treatment</td>\n",
       "      <td>0.000028</td>\n",
       "      <td>双侧</td>\n",
       "      <td>0.995928</td>\n",
       "      <td>不显著</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         p         p0       统计量  检测   p_value   结果\n",
       "0  control  treatment  0.000028  左侧  0.502036  不显著\n",
       "1  control  treatment  0.000028  右侧  0.497964  不显著\n",
       "2  control  treatment  0.000028  双侧  0.995928  不显著"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ABtest_P(temp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.0"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
